Algoritmo FFT (Fast Fourier Transform)

El algoritmo FFT (por sus siglas en inglés, Fast Fourier Transform) es un método eficiente para calcular la Transformada Discreta de Fourier (DFT) de una señal. En términos simples, permite convertir una señal del dominio del tiempo al dominio de la frecuencia.

Intuición

Imaginá que tenés una señal de audio, una serie de precios, o cualquier secuencia de valores que varía en el tiempo. La FFT te dice qué frecuencias (componentes senoidales) están presentes dentro de esa señal y con qué intensidad.

Qué hace matemáticamente

La Transformada Discreta de Fourier (DFT) convierte una secuencia \( x[n] \) (en el tiempo) en una secuencia \( X[k] \) (en frecuencia):

\[ X[k] = \sum_{n=0}^{N-1} x[n] \cdot e^{-j 2 \pi k n / N} \]

Calcular esto directamente cuesta \( O(N^2) \) operaciones, lo cual es ineficiente para señales grandes. El algoritmo FFT reduce esa complejidad a \( O(N \log N) \) aprovechando la simetría y periodicidad de los números complejos, permitiendo así procesar señales en tiempo real.

Ejemplo práctico en Python

        import numpy as np
        import matplotlib.pyplot as plt

        # Crear una señal con dos frecuencias
        fs = 1000  # frecuencia de muestreo (Hz)
        t = np.linspace(0, 1, fs)
        signal = np.sin(2*np.pi*50*t) + 0.5*np.sin(2*np.pi*120*t)

        # Aplicar FFT
        fft_result = np.fft.fft(signal)
        frequencies = np.fft.fftfreq(len(signal), 1/fs)

        # Mostrar espectro
        plt.plot(frequencies[:fs//2], np.abs(fft_result)[:fs//2])
        plt.title("Espectro de frecuencias")
        plt.xlabel("Frecuencia (Hz)")
        plt.ylabel("Amplitud")
        plt.show()
      

El resultado mostrará picos en 50 Hz y 120 Hz, las frecuencias presentes en la señal.

Usos comunes

En resumen, la FFT es una herramienta fundamental para cualquier área donde se analicen señales, ya que permite ver la estructura oculta en el dominio de las frecuencias.